#pragma once
#include <string>
#include <vector>

class SymmetricCrypto {
public:
    SymmetricCrypto();

    // 使用 SM4-CBC 加密
    std::vector<uint8_t> encrypt(
        const std::vector<uint8_t>& plaintext,
        const std::vector<uint8_t>& key,
        const std::vector<uint8_t>& iv);

    // 使用 SM4-CBC 解密
    std::vector<uint8_t> decrypt(
        const std::vector<uint8_t>& ciphertext,
        const std::vector<uint8_t>& key,
        const std::vector<uint8_t>& iv);

private:
    // PKCS#7 填充
    std::vector<uint8_t> pkcs7Pad(const std::vector<uint8_t>& data, size_t blockSize);
    std::vector<uint8_t> pkcs7Unpad(const std::vector<uint8_t>& data);
};
